// 第454题.四数相加II
// 输入：nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]
// 输出：2
// 解释：
// 两个元组如下：
// 1. (0, 0, 0, 1) -> nums1[0] + nums2[0] + nums3[0] + nums4[1] = 1 + (-2) + (-1) + 2 = 0
// 2. (1, 1, 0, 0) -> nums1[1] + nums2[1] + nums3[0] + nums4[0] = 2 + (-1) + (-1) + 0 = 0
// 思路：首先定义 一个map，key放a和b两数之和，value 放a和b两数之和出现的次数。
// 遍历大A和大B数组，统计两个数组元素之和，和出现的次数，放到map中。
// 定义int变量count，用来统计 a+b+c+d = 0 出现的次数。
// 在遍历大C和大D数组，找到如果 0-(c+d) 在map中出现过的话，
// 就用count把map中key对应的value也就是出现次数统计出来。
// 最后返回统计值 count 就可以了

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @param {number[]} nums3
 * @param {number[]} nums4
 * @return {number}
 */
 var fourSumCount = function(nums1, nums2, nums3, nums4) {
    let len=nums1.length;
    let map=new Map();
    let count=0;
    for(let i=0;i<len;i++){
        for(let j=0;j<len;j++){
            let num=nums1[i]+nums2[j];
            let value=map.get(num)|| 0;//value的值看是否出现过num
            map.set(num,value+1);
        }
    }
    for(let i=0;i<len;i++){
        for(let j=0;j<len;j++){
            let num=-(nums3[i]+nums4[j]);
            let value=map.get(num)||0;//看num在map中出现的次数
            count+=value;//count次数
        }
    }
    return count;
};